class Utils {

    //  转换成map
    toMap(array,keyFunc){
        let map = new Map();
        for(let x of array){
            let k = keyFunc(x);
            map.set(k,x);
        }
        return map;
    }

    //  提取成set
    toSet(array,keyFunc){
        let set = new Set();
        for(let x of array){
            let k = keyFunc(x);
            set.add(k);
        }
        return set;
    }

    //  扁平数组转换成 分组的子数组对象，按照某个字段进行分组  比如说按照班级给所有学生进行分组 最终的格式为 {group:'group',array:[]}
    group(array,keyFunc){
        let map = new Map();
        for(let x of array){
            let k = keyFunc(x);
            let v = map.get(k);
            if(v == null){
                v = {
                    group : k,
                    array : []
                };
                map.set(k,v);
            }

            v.array.push(x);
        }

        //  遍历map 组装对象
        let rtn = [];
        map.forEach((v,k) => {
            rtn.push(v);
        })

        return rtn;
    }

    //  和group相反 这里是将子数组合并成一个扁平的大数组 比如说把所有班级的学习合并到一起
    array(array,keyFunc){
       let rtn = [];
       for(let x of array){
           let arr = keyFunc(x);
           rtn.concat(rtn,arr);
       }
       return rtn;
    }

    //  将元素插入到指定的位置
    insert(array,item,func){
        let index = 0;
        for(let x of array){
            let shouldInsert = func(x,item);
            if(shouldInsert){
                break;
            }
            index++;
        }

        array.splice(index,0,item);
    }

    //  将指定的元素进行移除
    remove(array,func){
        for(let index =0; index < array.length;index++){
            let v = array[index];
            if(func(v)){
                array.splice(array,index,0);
                index--;
            }
        }
    }
}

let utils = new Utils();
export default utils;